#!/usr/bin/perl -w

# ARCHIVO    : vote-version.pl
# AUTHOR     : Jose Anastacio Esquivel Salas
# FECHA      : 02/02/2002

# DESCRIPCION: Permite enviar opinion sobre las propuestas de versiones


require ("init.pl");
require ("dbData.pl");
require ("dbUser.pl");
require ("dbDes.pl");
require ("dbOpe.pl");
require ("dbNotes.pl");
require ("dbEvent.pl");

# imprime cabecera
&print_header;


#//////////////// Imprimieno pagina Web //////////


sub imprimeJavaScript
{
#Se imprimen las funciones Javascript:
print <<EOFJ0;

<SCRIPT LANGUAGE="Javascript1.1">
<!-- 

function ShowMsg(txt)
{
  if (txt != "")
  {
    alert(txt);
  }
  return (false);
}


function Aceptar()
{
    if (document.formulario.login.value == "")
    {
	return(ShowMsg("$textos{'inData10'.1}"));
    }
    if (formulario.password.value == "")
    {
	return(ShowMsg("$textos{'fLogin'.1}"));
    }
    return(true);
}

// -->
</SCRIPT>
EOFJ0
  ;
}


sub imprimeCabecera
{
 print <<EOF1;
         <HTML>
         <HEAD> <BASE TARGET="descriptions">
	 <TITLE></TITLE>
	 </HEAD>
         <BODY BGCOLOR="#FFFFFF" BACKGROUND="../img/kc.gif">
EOF1
    ;   
}


sub imprimeTitulo
{
    local ($nota) = @_;
print <<EOF1;
	 <CENTER>
             <FONT COLOR="gray">
		 <H1>$textos{'title'.1}</H1>
             </FONT>
	 </CENTER><P>
EOF1
    ;

}


sub imprimeMensaje
{
    local($puede, $msg, $urlRetorno) = @_;
    
    if ($puede == 0)
    {
        $color = "red";
    }
    else
    {
	$color = "green";
    }

print <<EOFEND1
  <BR><BR><BR><BR>
  <TABLE BORDER=3 WIDTH=100%>
  <TD ALIGN=CENTER><FONT COLOR="$color"><B>$msg</B>       
  <P><A HREF="$urlRetorno" TARGET="structure"><IMG SRC="../$IMG/update.gif" BORDER=0></A>
  </TABLE>
EOFEND1
  ;

}



sub imprimeOcultos
{
    local($dbNombre, $idTema, $idEstructura, $idDescripcion)=@_;
print <<EOF1;
  <FORM NAME="formulario" METHOD="POST" TARGET="structure"  ACTION ="vote-version.pl" ONSUBMIT="return Aceptar()">
	<INPUT TYPE="HIDDEN" NAME="b"  VALUE=$dbNombre>
	<INPUT TYPE="HIDDEN" NAME="t"  VALUE=$idTema>
	<INPUT TYPE="HIDDEN" NAME="s"  VALUE=$idEstructura>
        <INPUT TYPE="HIDDEN" NAME="d"  VALUE=$idDescripcion><P>
EOF1
    ;
}


sub imprimeNotas
{
    local(%notas) = @_;

    if ($notas{numRows} > 0)
    {

print <<EOF10
     <B>$textos{'subtitle'.1}
     <TABLE>
	 <TR><TD><TD ALIGN="CENTER">$textos{'inData'.1}/<TD ALIGN="CENTER">$textos{'inData2'.1}</B>
EOF10
    ;

      for ($i=1; $i<=$notas{numRows};$i++)
      {
	$nombreW  = "nota" . $notas{idNote.$i};
	$titulo   = "$notas{'nAuthor'.$i}-$notas{'dayN'.$i}"; 
	$url_nota = $path."note.pl?b=$dbName&s=$idStructure&t=$idTopic&d=$idDescription&n=$notas{idNote.$i}";

print <<EOF11
        <TR><TD><A HREF="#" onClick="Mostrar_Nota('$url_nota','$nombreW')"><b>$titulo</b></A>&nbsp;
            <TD ALIGN="CENTER"><INPUT TYPE="RADIO" NAME="$notas{idNote.$i}" VALUE = 1 CHECKED>
	    <TD ALIGN="CENTER"><INPUT TYPE="RADIO" NAME="$notas{idNote.$i}" VALUE = -1>
EOF11
    ;
      }
      print "</TABLE><P>\n";
    }
}

sub imprimeCapturaVotos
{
    local($cancel_accion) = @_;
    $t = "\n<OPTION VALUE = 0 SELECTED>0";
    foreach $i(1..10)
    {
	$t = $t . "\n<OPTION VALUE = $i>$i";
    }
print <<EOF12
    <TABLE WIDTH=100%>
	<TR><TD><B>$textos{'inData3'.1}</B>
	    <TD><SELECT NAME="GC">
		    $t
	        </SELECT>
	<TR><TD><B>$textos{'inData4'.1}</B> 
	    <TD><SELECT NAME="GM">
		    $t
	        </SELECT>
    </TABLE><P>
    <TABLE WIDTH=100%>
        <TR><TD>$textos{'inData5'.1}
        <TR><TD><INPUT TYPE="TEXT"     NAME=\"login\"    SIZE=25  MAXLENGTH=100></TD>
        <TR><TD>$textos{'inData6'.1}
        <TR><TD><INPUT TYPE="PASSWORD" NAME=\"password\" SIZE=25  MAXLENGTH=100></TD>
    </TABLE><P>
    <INPUT TYPE="IMAGE" SRC="../$IMG/bSend.gif"  >
    <A HREF="$cancel_accion" TARGET="structure"><IMG SRC="../$IMG/bCancel.gif" BORDER=0></A> 
    </FORM>
EOF12
    ;   
}

sub imprimeFinal
{  
    local($dbNombre) = @_;
    $txt = 'versiona.htm';
    &print_help($dbNombre, $txt, 'helpError');
    print <<EOF1;       
    </BODY>
	</HTML>
EOF1
    ;
}


#////////////////  Procedimientos generales  ///////////////////

sub verificaPermisos
{
    local ($dbNombre, $idTema, $idDescripcion, $login, $password) = @_;
    
    #Traer lista de expertos en el tema
    %expertos = &get_expertsOnTopic($dbNombre, $idTema); 
    %expertos = &get_whoVotDoc($dbNombre, $idTema);

    $CORRECTO = 0; $EXISTE = 0;
    %dAutor = &get_data($dbNombre, "Author", "nameAuthor", "\'$login\'");
    if ($dAutor{numRows} > 0)
    {
	#Existe el author
	$EXISTE = 1;
	$idAutor = $dAutor{'idAuthor'.1};
	if ($dAutor{'password'.1} eq $password)
	{
	    $CORRECTO = 1;
	}
    }
    
    if (($CORRECTO == 1) && ($EXISTE == 1))
    {
	#Verificando que este en la lista
	$PUEDE = 0;
	foreach $i(1..$expertos{numRows})
	{
	    if ($expertos{idAuthor.$i} == $idAutor)
	    {
		$PUEDE = 1;
	    }
	}
	#Traer datos de la descripcion
	%des = &get_data($dbNombre, "Description", "idDescription", "$idDescripcion");
	if ($des{"idAuthor".1} == $idAutor)
	{
	    $PUEDE = 0;
	}
	$msg = $textos{'inData7'.1};
	if ($PUEDE == 0)
	{
	    $msg = $textos{'inData8'.1};
	}
    }
    else
    {
	$PUEDE = 0;
	$msg   = $textos{'inData9'.1};    
    }
    
    return ($PUEDE, $idAutor, $msg);

} 

#////////////// Procedimientos principales

sub procedimientoPost
{

    use CGI;

    $q = new CGI;

    #Se obtienen los datos que han llegado al formulario
   
    $dbNombre        = $q->param("b");
    $idTema          = $q->param("t");
    $idEstructura    = $q->param("s");
    $idDescripcion   = $q->param("d");
    
    #Obteniendo datos del tema y lenguaje a manejar
    ($dbLenguaje, $IMG) = &get_language($dbNombre);

    %data = &get_data($dbNombre, "Topic", "idTopic", $idTema); 
    #Se obtiene el nombre del tema en cuestion
    $nombreTema = $data{nameTopic.1};
    #Se obtiene el URL del tema en cuestion
    $URL = $data{URL.1};
    #Se obtiene el path de los frames a mostrar
    $path = &get_path($URL);

    %textos = &get_data($dbLenguaje, "MyForm", "name", "\'vote-version.pl\'");

    #Verificando permisos para votar la version
    $login    = $q->param("login");
    $password = $q->param("password");
    ($puede, $idVotante, $msg) = &verificaPermisos($dbNombre, $idTema, $idDescripcion, $login, $password);
    $gCont = $q->param("GC");
    $gMejo = $q->param("GM");
    if ($puede == 1)
    {
	
	#traer anotaciones de la descripcion
	%notas = &traer_notas($dbNombre, $idDescripcion);
	#traer version activa
	%VersionActiva  = &get_activeVersion ($dbNombre, $idDescripcion);
	&save_VersionVotation($dbNombre, $idDescripcion, $VersionActiva{idVersion}, $idTema, $idVotante, $gCont, $gMejo);
        &insert_historic ($dbNombre, "\'VoteVer\'", $idVotante, $idTema, $idDescripcion, $VersionActiva{idVersion});

	foreach $i(1..$notas{numRows})
	{
	    $idNota = $notas{idNote.$i}; 
	    $voto   = $q->param("$idNota");
	    &vota_anotacion($dbNombre, $idVotante, $idNota, $voto, $idTema, 'CONTINUITY');
	}
	#Notificacion del evento
	$Datos{Accion} 	= 32;     #Accion 32 es sVoteVersion
	$Datos{Autor}		= $idVotante;
	$Datos{Fecha}		= &get_date();
	$Datos{Valor1} 	        = $gCont;
	$Datos{Valor2}          = $gMejo;
	$Datos{Tema}            = $idTema;
	$Datos{Estructura}      = $idEstructura;
	$Datos{Descripcion}	= $idDescripcion;
	
	&notifyEventG ($dbNombre, %Datos);
	#Fin de la notificacion del evento
    }

    $urlRetorno = $path . "controlNT.pl?b=$dbNombre&t=$idTema&s=$idEstructura&d=$idDescripcion";


    &imprimeCabecera;
    &imprimeMensaje($puede, $msg, $urlRetorno);
    &imprimeFinal($dbNombre);
}






sub procedimientoGet
{
    #Se procesa la entrada al script
    %input = &parse_input;

    #Se obtienen los datos de entrada
    $dbNombre      = $input{b};  
    $idTema        = $input{t};
    $idEstructura  = $input{s};
    $idDescripcion = $input{d};

    #Obteniendo datos del tema y lenguaje a manejar
    ($dbLenguaje, $IMG) = &get_language($dbNombre);

    %data = &get_data($dbNombre, "Topic", "idTopic", $idTema); 
    #Se obtiene el nombre del tema en cuestion
    $nombreTema = $data{nameTopic.1};
    #Se obtiene el URL del tema en cuestion
    $URL = $data{URL.1};
    #Se obtiene el path de los frames a mostrar
    $path = &get_path($URL);

    %textos = &get_data($dbLenguaje, "MyForm", "name", "\'vote-version.pl\'");

    %activeVersion  = &get_activeVersion ($dbNombre, $idDescripcion);
    #traer anotaciones de la descripcion
    %notas = &traer_notas($dbNombre, $idDescripcion);

    $cancel_accion = $path . "controlNT.pl?b=$dbNombre&t=$idTema&s=$idEstructura&d=$idDescripcion";

    &imprimeJavaScript;
    &imprimeCabecera;
    &imprimeTitulo($activeVersion{note});
    &imprimeOcultos($dbNombre, $idTema, $idEstructura, $idDescripcion);
    &imprimeNotas(%notas);
    &imprimeCapturaVotos($cancel_accion);
    &imprimeFinal($dbNombre);
}    



sub main
{
    if ('POST' eq $ENV{'REQUEST_METHOD'})
    {
	&procedimientoPost;
    }  
    else
    {
	&procedimientoGet;
    }
}


# manda llamar a main
&main;
